package com.atguigu.spzx.product.util;

import com.atguigu.spzx.model.entity.product.Category;

import java.util.ArrayList;
import java.util.List;

/**
 * 封装分类列表树结构类
 * @author Mahone
 */
public class CategoryHelper {
    public static List<Category> buildTree(List<Category> categoryList) {
        // 创建一个树集合
        List<Category> tree = new ArrayList<>();
        // 对categoryList进行遍历，先拿到一级列表
        for (Category category : categoryList) {
            if (category.getParentId() == 0){
                tree.add(findChildren(category,categoryList));
            }
        }
        return tree;
    }

    /**
     * 遍历查找父节点的子节点
     * @param category
     * @param categoryList
     * @return
     */
    private static Category findChildren(Category category, List<Category> categoryList) {
        // 创建列表类集合，用来存储其子节点
        List<Category> children = new ArrayList<>();
        // 遍历集合中分类列表的parenId是否与一级列表的主键相等
        for (Category categoryChild : categoryList) {
            // 比较的是其字段的值
            if (categoryChild.getParentId().longValue() == category.getId().longValue()){
                // 相等证明找到其子节点
                // 继续让其子节点执行该方法，找其子节点的子节点
                children.add(findChildren(categoryChild,categoryList));
                // 将所有子节点存储自children，即下级列表属性
                category.setChildren(children);
            }
        }
        if (children.size() >0){
            // 说明有值
            category.setHasChildren(true);
        }
        return category;
    }
}
